#include "Chat.h"
#include "log.h"
#include <stdlib.h>
#include "InformacionConversacion.h"
#include <errno.h>
#include <signal.h>

#define EXIT_ERROR_PARAMETROS 1

void sigusr1Handler (int signum){
    log(stdout, "Senial recibida.\n");
}
     

int main(int argc, char *argv[]){

    if(argc < 3) {
	log(stdout, "%s <numero usuario> <id conversacion>", argv[0]);
	exit(EXIT_ERROR_PARAMETROS);
    }

    int numeroUsuario = atoi(argv[1]);
    int idConversacion = atoi(argv[2]);

    struct sigaction new_action, old_action;
    new_action.sa_handler = sigusr1Handler;
    sigemptyset (&new_action.sa_mask);
    new_action.sa_flags = 0;
    sigaction (SIGUSR1, NULL, &old_action);
    if (old_action.sa_handler != SIG_IGN){
	sigaction (SIGUSR1, &new_action, NULL);
	log(stdout, "OK\n");
    }

    InformacionConversacion* conversacion = ChatObtenerDatosDeConversacion(numeroUsuario, idConversacion);
    
    char mensaje[100];
    mensaje[0] = 0;
    
    bool salir = false;
    while(!salir){
	if(!fgets(mensaje, 100, stdin)){
	    perror("Error la leer: ");
	    break;
	}

	if(mensaje[0]==':'){
	    mensaje[strlen(mensaje)-1] = 0;
	    char buffer[101];
	    FILE* archivo = fopen(mensaje+1, "r");
	    if(!archivo){
		log(stdout, "Error al abrir el archivo %s.\n", mensaje+1);
		continue;
	    }

	    while(!salir && !feof(archivo)){
		fread(buffer, 100, 1, archivo);
		buffer[100] = 0;
		log(stdout, "%d: Envio parte del archivo.\n", getpid());
		salir = !ChatEnviarMensaje(conversacion, buffer);
	    }
	    fclose(archivo);
	    continue;
	}

	log(stdout, "%d: Envio mensaje %s\n", getpid(), mensaje);
     	salir = !ChatEnviarMensaje(conversacion, mensaje);
    }

    ChatLiberarDatosDeConversacion(conversacion);

    log(stdout, "%d: Proceso emisor sale.\n",getpid());

    return 0;
}
